package personal.leil.learning.bestarrange;

import java.util.Arrays;
import java.util.Comparator;

/**
 * 会议室安排问题
 * <p>
 *     一些项目要占用一个会议室宣讲，
 *     会议室不能同时容纳两个项目的宣讲，
 *     给你每一个项目开始的时间和结束的时间(给你一个数 组，里面是一个个具体的项目)，
 *     你来安排宣讲的日程，要求会议室进行的宣讲的场次最多。返回这个最多的宣讲场次。
 * </p>
 * <p><i>按会议的结束时间排序</i></p>
 * @author Leil
 * @version 1.0
 * @since 2024/1/26
 */
public class BestArrange {


    /**
     * 会议最优安排
     * @param programs  会议集合
     * @param start     最早会议开始时间
     * @return          当天最多开会数量
     */
    public static int bestArrange(Program[] programs, int start) {
        Arrays.sort(programs, Comparator.comparingInt(o -> o.end));
        int result = 0;
        int lastProgramEnd = start;
        for (Program program : programs) {
            if (program.start >= lastProgramEnd) {
                lastProgramEnd = program.end;
                result++;
                // print for test
                System.out.println(program);
            }
        }
        return result;
    }


    public static class Program {
        int start;
        int end;

        public Program(int start, int end) {
            this.start = start;
            this.end = end;
        }

        @Override
        public String toString() {
            return "Program[" + this.start + ", " + this.end + "]";
        }
    }


    /******************* For test ***********************/
    public static void main(String[] args) {
        Program[] programs = new Program[] {
                new Program(7, 9),
                new Program(8, 10),
                new Program(9, 11),
                new Program(10, 11),
                new Program(11, 14),
                new Program(14, 15),
                new Program(16, 18)
        };
        int result = bestArrange(programs, 8);
        System.out.println("最大安排的会议数量为：" + result);
    }

}
